class Solution {
public:

    int dx[4]={0,0,1,-1};
    int dy[4]={ 1,-1,0,0};
    bool visit[60][60]; 
    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
        bfs(image,sr,sc,color);
        return image; 
    }
    void  bfs(vector<vector<int>>& image, int sr, int sc, int color)
    {
        int m=image.size();int n=image[0].size();
        int tmp=image[sr][sc];
        if(image[sr][sc]!=color)
        {
            image[sr][sc]=color;
            visit[sr][sc]=true; 
        }
        queue<pair<int,int>>q;
        q.push({sr,sc});
        while(q.size())
        {
            auto [a,b]=q.front();
            q.pop();
            for(int i=0;i<4;i++)
            {
                int x=a+dx[i];int y=b+dy[i];
                if(x>=0&&x<m&&y>=0&&y<n&&!visit[x][y]&&image[x][y]==tmp)
                {
                    q.push({x,y});
                    image[x][y]=color;
                    visit[x][y]=true;
                }
            }
        }
    }

};
